{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "BCTUDjwiYn6T"
      },
      "source": [
        "## DINOv3 Fine-tuning for Image Classification"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "!pip install -q trackio git+https://github.com/huggingface/transformers.git"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "5AJ3YVCE8S9Y"
      },
      "source": [
        "## Dataset"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "s_Aabbb6VBZt"
      },
      "source": [
        "We will do a very small run on food101 dataset."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "metadata": {
        "id": "Cxzbngbq4K31"
      },
      "outputs": [],
      "source": [
        "from datasets import load_dataset\n",
        "\n",
        "ds = load_dataset(\"ethz/food101\")\n",
        "\n",
        "train_ds = ds[\"train\"]\n",
        "train_ds = train_ds.shuffle().train_test_split(test_size=0.9)[\"train\"]\n",
        "val_ds = ds[\"validation\"].shuffle().train_test_split(test_size=0.9)[\"train\"]"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "g1wl86sp8L6C",
        "outputId": "1b42f43f-df62-4eba-f469-54cabd232cf9"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "Dataset({\n",
              "    features: ['image', 'label'],\n",
              "    num_rows: 7575\n",
              "})"
            ]
          },
          "execution_count": 8,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "train_ds"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Tq5OiKxvVj9k",
        "outputId": "391489ba-d95f-498a-b4bb-f959e19686b0"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "Dataset({\n",
              "    features: ['image', 'label'],\n",
              "    num_rows: 2525\n",
              "})"
            ]
          },
          "execution_count": 9,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "val_ds"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 10,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "1JcvDPFK8Scd",
        "outputId": "5c920e23-e96b-4c62-bf3a-7db183c97f48"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Classes: 101\n"
          ]
        }
      ],
      "source": [
        "num_classes = train_ds.features[\"label\"].num_classes\n",
        "id2label = {i: name for i, name in enumerate(train_ds.features[\"label\"].names)}\n",
        "label2id = {v: k for k, v in id2label.items()}\n",
        "print(f\"Classes: {num_classes}\")"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "_69A3AmO81c8"
      },
      "source": [
        "## Load Model\n",
        "\n",
        "This model doesn't come with a head, so we need to write the headed model class."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 11,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 113,
          "referenced_widgets": [
            "32138245d41348928cc5b5834b07cb7e",
            "df6de04fdb204d348767dd0b2d0e88f7",
            "63a3800d62dd41d6b4a3f643a8930d95",
            "49d67bd205184874a5cee04d318d91fe",
            "f00ace964f96471b9eb839cce48ce378",
            "3ad0ac8def244930a3aff41d68a88a65",
            "7464841c193d492685bb929b1c0d230c",
            "5c16553a2ff34a37a2cb62b4a4c42a6f",
            "34be83ddb4bf43e58cadbcbac5a606b7",
            "0ce7bd7e52074f29b446ef2d4dd0921a",
            "7e2178d696c04d5787e736ace9ab57c0",
            "3ff80bc2f64948408757caa8715d0603",
            "12aa8675bca54f05a6deb7ec7a5def7a",
            "31a74feac76f4744a0f34fbc99433831",
            "bd51d97e739a4e78ad28083043f638d8",
            "062d36b5d0c043a597eb9b3ebd35f313",
            "2c2223a6ae3e4ff6be96a5f4e2d2d9b6",
            "f2c7be27f90b49a3abe51b5e3003c17d",
            "76d1f15c857640c3b06d98aef478f234",
            "d43089f8240c44339c6881355ff0aee3",
            "a139b85557a942b9b5d32b9d7def3e50",
            "92043bfce97e4629bf9e4b268aa88c11",
            "f20b3989658642528f4ed91666320097",
            "3ee9921a635d44ec9b248e2155b5b243",
            "caf0790dbf2544378cb04aa8eb3098c3",
            "3ff0fc5ce62a44b9950dd8575d90bd21",
            "77cdafc6dae44107a43a46ae19ed390a",
            "65d8b73e3bdd46fca8a42b67739e27f9",
            "b566321171044b0eb02ea3bd8c0472df",
            "62535e046f794a28b4002c3f34fe7ff7",
            "663aa65fdb4e4349b2815b6bafce4dcd",
            "8410c9d15bca4c9f8b3aab2b7d327211",
            "fb359d0651a74fe790aaace9a5d0e329"
          ]
        },
        "id": "_oqXAu_y81H4",
        "outputId": "7c4a4f6f-2301-4a43-eecb-50f1adb004b9"
      },
      "outputs": [
        {
          "data": {
            "application/vnd.jupyter.widget-view+json": {
              "model_id": "32138245d41348928cc5b5834b07cb7e",
              "version_major": 2,
              "version_minor": 0
            },
            "text/plain": [
              "preprocessor_config.json:   0%|          | 0.00/585 [00:00<?, ?B/s]"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        },
        {
          "data": {
            "application/vnd.jupyter.widget-view+json": {
              "model_id": "3ff80bc2f64948408757caa8715d0603",
              "version_major": 2,
              "version_minor": 0
            },
            "text/plain": [
              "config.json:   0%|          | 0.00/744 [00:00<?, ?B/s]"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        },
        {
          "data": {
            "application/vnd.jupyter.widget-view+json": {
              "model_id": "f20b3989658642528f4ed91666320097",
              "version_major": 2,
              "version_minor": 0
            },
            "text/plain": [
              "model.safetensors:   0%|          | 0.00/3.36G [00:00<?, ?B/s]"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "import torch.nn as nn\n",
        "import torch\n",
        "from transformers import AutoImageProcessor, AutoModel, get_cosine_schedule_with_warmup\n",
        "\n",
        "MODEL_NAME = \"facebook/dinov3-vith16plus-pretrain-lvd1689m\"\n",
        "\n",
        "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
        "\n",
        "\n",
        "image_processor = AutoImageProcessor.from_pretrained(MODEL_NAME)\n",
        "backbone = AutoModel.from_pretrained(MODEL_NAME)\n",
        "\n",
        "hidden_size = getattr(backbone.config, \"hidden_size\", None)\n",
        "\n",
        "class DinoV3Linear(nn.Module):\n",
        "    def __init__(self, backbone: AutoModel, hidden_size: int, num_classes: int, freeze_backbone: bool = True):\n",
        "        super().__init__()\n",
        "        self.backbone = backbone\n",
        "        if freeze_backbone:\n",
        "            for p in self.backbone.parameters():\n",
        "                p.requires_grad = False\n",
        "            self.backbone.eval()\n",
        "\n",
        "        self.head = nn.Linear(hidden_size, num_classes)\n",
        "\n",
        "    def forward(self, pixel_values):\n",
        "        outputs = self.backbone(pixel_values=pixel_values)\n",
        "        last_hidden = outputs.last_hidden_state\n",
        "        cls = last_hidden[:, 0]\n",
        "        logits = self.head(cls)\n",
        "        return logits\n",
        "\n",
        "model = DinoV3Linear(backbone, hidden_size, num_classes, freeze_backbone=True).to(device) # we only train the head"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "IfC3TFbw9SlZ"
      },
      "source": [
        "Write the data collator to batch inputs and dataloaders for training."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 12,
      "metadata": {
        "id": "Wlo3_8qE9SVR"
      },
      "outputs": [],
      "source": [
        "from dataclasses import dataclass\n",
        "from PIL import Image\n",
        "import numpy as np\n",
        "import torch\n",
        "from transformers import AutoImageProcessor\n",
        "\n",
        "@dataclass\n",
        "class Collator:\n",
        "    processor: AutoImageProcessor\n",
        "\n",
        "    def __call__(self, batch):\n",
        "        raw_images = [x[\"image\"] for x in batch]\n",
        "        labels = torch.tensor([x[\"label\"] for x in batch], dtype=torch.long)\n",
        "\n",
        "        rgb_images = []\n",
        "        # there's grayscale images in the dataset\n",
        "        for im in raw_images:\n",
        "            if isinstance(im, Image.Image):\n",
        "                rgb_images.append(im.convert(\"RGB\"))\n",
        "                continue\n",
        "\n",
        "        inputs = self.processor(images=rgb_images, return_tensors=\"pt\")\n",
        "        return {\"pixel_values\": inputs[\"pixel_values\"], \"labels\": labels}\n",
        "\n",
        "collate_fn = Collator(image_processor)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 13,
      "metadata": {
        "id": "Nou-Ct_e9zV5"
      },
      "outputs": [],
      "source": [
        "from torch.utils.data import DataLoader\n",
        "import os\n",
        "\n",
        "BATCH_SIZE = 8\n",
        "NUM_WORKERS = min(8, os.cpu_count() or 2)\n",
        "\n",
        "train_loader = DataLoader(\n",
        "    train_ds,\n",
        "    batch_size=BATCH_SIZE,\n",
        "    shuffle=True,\n",
        "    num_workers=NUM_WORKERS,\n",
        "    pin_memory=True,\n",
        "    collate_fn=collate_fn,\n",
        ")\n",
        "val_loader = DataLoader(\n",
        "    val_ds,\n",
        "    batch_size=BATCH_SIZE,\n",
        "    shuffle=False,\n",
        "    num_workers=NUM_WORKERS,\n",
        "    pin_memory=True,\n",
        "    collate_fn=collate_fn,\n",
        ")"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "RblgS11W-Wuo"
      },
      "source": [
        "## Training"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "25sCxjwG_tPo"
      },
      "source": [
        "Find config below."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 14,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "WWM8KLQD_sya",
        "outputId": "1672c194-aad2-4af2-a9cf-e61aa0d558b9"
      },
      "outputs": [
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "/tmp/ipython-input-593493728.py:19: FutureWarning: `torch.cuda.amp.GradScaler(args...)` is deprecated. Please use `torch.amp.GradScaler('cuda', args...)` instead.\n",
            "  scaler = torch.cuda.amp.GradScaler(enabled=torch.cuda.is_available())\n"
          ]
        }
      ],
      "source": [
        "import math\n",
        "import random\n",
        "from typing import List, Dict, Any\n",
        "\n",
        "\n",
        "EPOCHS = 5\n",
        "LR = 5e-4\n",
        "WEIGHT_DECAY = 1e-4\n",
        "WARMUP_RATIO = 0.05\n",
        "CHECKPOINT_DIR = \"./checkpoints_dinov3_food101\"\n",
        "EVAL_EVERY_STEPS = 100\n",
        "\n",
        "optimizer = torch.optim.AdamW(filter(lambda p: p.requires_grad, model.parameters()), lr=LR, weight_decay=WEIGHT_DECAY)\n",
        "total_steps = EPOCHS * math.ceil(len(train_loader))\n",
        "warmup_steps = int(WARMUP_RATIO * total_steps)\n",
        "scheduler = get_cosine_schedule_with_warmup(optimizer, num_warmup_steps=warmup_steps, num_training_steps=total_steps)\n",
        "criterion = nn.CrossEntropyLoss()\n",
        "\n",
        "scaler = torch.cuda.amp.GradScaler(enabled=torch.cuda.is_available())"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 15,
      "metadata": {
        "id": "OJPRRz09kxFT"
      },
      "outputs": [],
      "source": [
        "os.makedirs(\"./checkpoints_dinov3_food101\")"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "FHS5DSu1_22g"
      },
      "source": [
        "We need to evaluate during training."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 16,
      "metadata": {
        "id": "TSD4tzZr_4i3"
      },
      "outputs": [],
      "source": [
        "def evaluate() -> Dict[str, float]:\n",
        "    model.eval()\n",
        "    correct, total, loss_sum = 0, 0, 0.0\n",
        "    with torch.no_grad():\n",
        "        for batch in val_loader:\n",
        "            pixel_values = batch[\"pixel_values\"].to(device, non_blocking=True)\n",
        "            labels = batch[\"labels\"].to(device, non_blocking=True)\n",
        "            logits = model(pixel_values)\n",
        "            loss = criterion(logits, labels)\n",
        "            loss_sum += loss.item() * labels.size(0)\n",
        "            preds = logits.argmax(dim=-1)\n",
        "            correct += (preds == labels).sum().item()\n",
        "            total += labels.size(0)\n",
        "    return {\n",
        "        \"val_loss\": loss_sum / max(total, 1),\n",
        "        \"val_acc\": correct / max(total, 1),\n",
        "    }"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "yakvOUOkAVcR"
      },
      "source": [
        "Let's write the training loop. We'll also use trackio for experiment tracking."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "import trackio\n",
        "\n",
        "best_acc = 0.0\n",
        "global_step = 0\n",
        "\n",
        "trackio.init(project=\"dinov3\", config={\n",
        "            \"epochs\": EPOCHS,\n",
        "            \"learning_rate\": LR,\n",
        "            \"batch_size\": BATCH_SIZE\n",
        "        })\n",
        "\n",
        "for epoch in range(1, EPOCHS + 1):\n",
        "    model.train()\n",
        "    model.backbone.eval()  # comment out if you want to train the whole model\n",
        "\n",
        "    running_loss = 0.0\n",
        "    for i, batch in enumerate(train_loader, start=1):\n",
        "        pixel_values = batch[\"pixel_values\"].to(device, non_blocking=True)\n",
        "        labels = batch[\"labels\"].to(device, non_blocking=True)\n",
        "\n",
        "        optimizer.zero_grad(set_to_none=True)\n",
        "        logits = model(pixel_values)\n",
        "        loss = criterion(logits, labels)\n",
        "\n",
        "        scaler.scale(loss).backward()\n",
        "        scaler.step(optimizer)\n",
        "        scaler.update()\n",
        "        scheduler.step()\n",
        "\n",
        "        running_loss += loss.item()\n",
        "        global_step += 1\n",
        "\n",
        "        if global_step % EVAL_EVERY_STEPS == 0:\n",
        "            metrics = evaluate()\n",
        "            print(\n",
        "                f\"[epoch {epoch} | step {global_step}] \"\n",
        "                f\"train_loss={running_loss / EVAL_EVERY_STEPS:.4f} \"\n",
        "                f\"val_loss={metrics['val_loss']:.4f} val_acc={metrics['val_acc']*100:.2f}%\"\n",
        "            )\n",
        "            running_loss = 0.0\n",
        "\n",
        "            trackio.log(\n",
        "                    {\n",
        "                        \"epoch\": epoch,\n",
        "                        \"val_acc\": best_acc,\n",
        "                    }\n",
        "                )\n",
        "\n",
        "            if metrics[\"val_acc\"] > best_acc:\n",
        "                best_acc = metrics[\"val_acc\"]\n",
        "                ckpt_path = os.path.join(CHECKPOINT_DIR, f\"best_acc_{best_acc:.4f}.pt\")\n",
        "                torch.save(\n",
        "                    {\n",
        "                        \"model_state_dict\": model.state_dict(),\n",
        "                        \"optimizer_state_dict\": optimizer.state_dict(),\n",
        "                        \"scheduler_state_dict\": scheduler.state_dict(),\n",
        "                        \"config\": {\n",
        "                            \"model_name\": MODEL_NAME,\n",
        "                            \"num_classes\": num_classes,\n",
        "                        },\n",
        "                        \"step\": global_step,\n",
        "                        \"epoch\": epoch,\n",
        "                    },\n",
        "                    ckpt_path,\n",
        "                )\n",
        "\n",
        "\n",
        "    metrics = evaluate()\n",
        "    print(\n",
        "        f\"END EPOCH {epoch}: val_loss={metrics['val_loss']:.4f} val_acc={metrics['val_acc']*100:.2f}% \"\n",
        "        f\"(best_acc={best_acc*100:.2f}%)\"\n",
        "    )\n",
        "    trackio.finish()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "dX0kEHogATQ_"
      },
      "outputs": [],
      "source": [
        "!trackio show"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "VKpGJ4L7bb2E"
      },
      "source": [
        "Let's infer with the model, I have a few in the wild images."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 19,
      "metadata": {
        "id": "RGZntYQEaVbA"
      },
      "outputs": [],
      "source": [
        "import torch\n",
        "from PIL import Image\n",
        "from typing import List, Dict\n",
        "\n",
        "\n",
        "model.eval()\n",
        "\n",
        "images = [\"/content/pizza.jpg\", \"/content/spaghetti.JPG\"]\n",
        "\n",
        "pil_images = [Image.open(p).convert(\"RGB\") for p in images]\n",
        "inputs = image_processor(images=pil_images, return_tensors=\"pt\").to(device)\n",
        "\n",
        "with torch.no_grad():\n",
        "  logits = model(inputs[\"pixel_values\"])\n",
        "\n",
        "# take top 2 classes\n",
        "probs = logits.softmax(dim=-1)\n",
        "scores, indices = probs.topk(2, dim=-1)\n",
        "\n",
        "results = []\n",
        "for path, idxs, scs in zip(images, indices, scores):\n",
        "    preds = [\n",
        "        {\"label_id\": int(i.item()),\n",
        "          \"label\": id2label.get(int(i.item()), f\"class_{int(i)}\"),\n",
        "          \"score\": float(s.item())}\n",
        "        for i, s in zip(idxs, scs)\n",
        "    ]\n",
        "    results.append({\"image\": path, \"topk\": preds})\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "bFoB-1Ebcab1"
      },
      "source": [
        "The model predicts correctly, which is expected given we only trained head with the great backbone frozen, it learned very fast. Feel free to try with more challenging use cases."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 20,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "NrgtO2D1cXzj",
        "outputId": "c972e7d0-ee78-45d3-e91f-7c68521d6a0b"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "[{'image': '/content/pizza.jpg',\n",
              "  'topk': [{'label_id': 76, 'label': 'pizza', 'score': 0.7595003843307495},\n",
              "   {'label_id': 35, 'label': 'escargots', 'score': 0.013227012008428574}]},\n",
              " {'image': '/content/spaghetti.JPG',\n",
              "  'topk': [{'label_id': 91,\n",
              "    'label': 'spaghetti_carbonara',\n",
              "    'score': 0.6622196435928345},\n",
              "   {'label_id': 90,\n",
              "    'label': 'spaghetti_bolognese',\n",
              "    'score': 0.18182380497455597}]}]"
            ]
          },
          "execution_count": 20,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "results"
      ]
    }
  ],
  "metadata": {
    "accelerator": "GPU",
    "colab": {
      "gpuType": "L4",
      "machine_shape": "hm",
      "provenance": []
    },
    "kernelspec": {
      "display_name": "Python 3",
      "name": "python3"
    },
    "language_info": {
      "name": "python"
    },
    "widgets": {
      "application/vnd.jupyter.widget-state+json": {
        "062d36b5d0c043a597eb9b3ebd35f313": {
          "model_module": "@jupyter-widgets/base",
          "model_module_version": "1.2.0",
          "model_name": "LayoutModel",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "0ce7bd7e52074f29b446ef2d4dd0921a": {
          "model_module": "@jupyter-widgets/base",
          "model_module_version": "1.2.0",
          "model_name": "LayoutModel",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "12aa8675bca54f05a6deb7ec7a5def7a": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "HTMLModel",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_2c2223a6ae3e4ff6be96a5f4e2d2d9b6",
            "placeholder": "​",
            "style": "IPY_MODEL_f2c7be27f90b49a3abe51b5e3003c17d",
            "value": "config.json: 100%"
          }
        },
        "2c2223a6ae3e4ff6be96a5f4e2d2d9b6": {
          "model_module": "@jupyter-widgets/base",
          "model_module_version": "1.2.0",
          "model_name": "LayoutModel",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "31a74feac76f4744a0f34fbc99433831": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "FloatProgressModel",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "FloatProgressModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "ProgressView",
            "bar_style": "success",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_76d1f15c857640c3b06d98aef478f234",
            "max": 744,
            "min": 0,
            "orientation": "horizontal",
            "style": "IPY_MODEL_d43089f8240c44339c6881355ff0aee3",
            "value": 744
          }
        },
        "32138245d41348928cc5b5834b07cb7e": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "HBoxModel",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HBoxModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HBoxView",
            "box_style": "",
            "children": [
              "IPY_MODEL_df6de04fdb204d348767dd0b2d0e88f7",
              "IPY_MODEL_63a3800d62dd41d6b4a3f643a8930d95",
              "IPY_MODEL_49d67bd205184874a5cee04d318d91fe"
            ],
            "layout": "IPY_MODEL_f00ace964f96471b9eb839cce48ce378"
          }
        },
        "34be83ddb4bf43e58cadbcbac5a606b7": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "ProgressStyleModel",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "ProgressStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "bar_color": null,
            "description_width": ""
          }
        },
        "3ad0ac8def244930a3aff41d68a88a65": {
          "model_module": "@jupyter-widgets/base",
          "model_module_version": "1.2.0",
          "model_name": "LayoutModel",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "3ee9921a635d44ec9b248e2155b5b243": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "HTMLModel",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_65d8b73e3bdd46fca8a42b67739e27f9",
            "placeholder": "​",
            "style": "IPY_MODEL_b566321171044b0eb02ea3bd8c0472df",
            "value": "model.safetensors: 100%"
          }
        },
        "3ff0fc5ce62a44b9950dd8575d90bd21": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "HTMLModel",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_8410c9d15bca4c9f8b3aab2b7d327211",
            "placeholder": "​",
            "style": "IPY_MODEL_fb359d0651a74fe790aaace9a5d0e329",
            "value": " 3.36G/3.36G [00:18&lt;00:00, 296MB/s]"
          }
        },
        "3ff80bc2f64948408757caa8715d0603": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "HBoxModel",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HBoxModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HBoxView",
            "box_style": "",
            "children": [
              "IPY_MODEL_12aa8675bca54f05a6deb7ec7a5def7a",
              "IPY_MODEL_31a74feac76f4744a0f34fbc99433831",
              "IPY_MODEL_bd51d97e739a4e78ad28083043f638d8"
            ],
            "layout": "IPY_MODEL_062d36b5d0c043a597eb9b3ebd35f313"
          }
        },
        "49d67bd205184874a5cee04d318d91fe": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "HTMLModel",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_0ce7bd7e52074f29b446ef2d4dd0921a",
            "placeholder": "​",
            "style": "IPY_MODEL_7e2178d696c04d5787e736ace9ab57c0",
            "value": " 585/585 [00:00&lt;00:00, 65.6kB/s]"
          }
        },
        "5c16553a2ff34a37a2cb62b4a4c42a6f": {
          "model_module": "@jupyter-widgets/base",
          "model_module_version": "1.2.0",
          "model_name": "LayoutModel",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "62535e046f794a28b4002c3f34fe7ff7": {
          "model_module": "@jupyter-widgets/base",
          "model_module_version": "1.2.0",
          "model_name": "LayoutModel",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "63a3800d62dd41d6b4a3f643a8930d95": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "FloatProgressModel",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "FloatProgressModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "ProgressView",
            "bar_style": "success",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_5c16553a2ff34a37a2cb62b4a4c42a6f",
            "max": 585,
            "min": 0,
            "orientation": "horizontal",
            "style": "IPY_MODEL_34be83ddb4bf43e58cadbcbac5a606b7",
            "value": 585
          }
        },
        "65d8b73e3bdd46fca8a42b67739e27f9": {
          "model_module": "@jupyter-widgets/base",
          "model_module_version": "1.2.0",
          "model_name": "LayoutModel",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "663aa65fdb4e4349b2815b6bafce4dcd": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "ProgressStyleModel",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "ProgressStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "bar_color": null,
            "description_width": ""
          }
        },
        "7464841c193d492685bb929b1c0d230c": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "DescriptionStyleModel",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "76d1f15c857640c3b06d98aef478f234": {
          "model_module": "@jupyter-widgets/base",
          "model_module_version": "1.2.0",
          "model_name": "LayoutModel",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "77cdafc6dae44107a43a46ae19ed390a": {
          "model_module": "@jupyter-widgets/base",
          "model_module_version": "1.2.0",
          "model_name": "LayoutModel",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "7e2178d696c04d5787e736ace9ab57c0": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "DescriptionStyleModel",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "8410c9d15bca4c9f8b3aab2b7d327211": {
          "model_module": "@jupyter-widgets/base",
          "model_module_version": "1.2.0",
          "model_name": "LayoutModel",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "92043bfce97e4629bf9e4b268aa88c11": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "DescriptionStyleModel",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "a139b85557a942b9b5d32b9d7def3e50": {
          "model_module": "@jupyter-widgets/base",
          "model_module_version": "1.2.0",
          "model_name": "LayoutModel",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "b566321171044b0eb02ea3bd8c0472df": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "DescriptionStyleModel",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "bd51d97e739a4e78ad28083043f638d8": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "HTMLModel",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_a139b85557a942b9b5d32b9d7def3e50",
            "placeholder": "​",
            "style": "IPY_MODEL_92043bfce97e4629bf9e4b268aa88c11",
            "value": " 744/744 [00:00&lt;00:00, 93.7kB/s]"
          }
        },
        "caf0790dbf2544378cb04aa8eb3098c3": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "FloatProgressModel",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "FloatProgressModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "ProgressView",
            "bar_style": "success",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_62535e046f794a28b4002c3f34fe7ff7",
            "max": 3362432800,
            "min": 0,
            "orientation": "horizontal",
            "style": "IPY_MODEL_663aa65fdb4e4349b2815b6bafce4dcd",
            "value": 3362432800
          }
        },
        "d43089f8240c44339c6881355ff0aee3": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "ProgressStyleModel",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "ProgressStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "bar_color": null,
            "description_width": ""
          }
        },
        "df6de04fdb204d348767dd0b2d0e88f7": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "HTMLModel",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_3ad0ac8def244930a3aff41d68a88a65",
            "placeholder": "​",
            "style": "IPY_MODEL_7464841c193d492685bb929b1c0d230c",
            "value": "preprocessor_config.json: 100%"
          }
        },
        "f00ace964f96471b9eb839cce48ce378": {
          "model_module": "@jupyter-widgets/base",
          "model_module_version": "1.2.0",
          "model_name": "LayoutModel",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "f20b3989658642528f4ed91666320097": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "HBoxModel",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HBoxModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HBoxView",
            "box_style": "",
            "children": [
              "IPY_MODEL_3ee9921a635d44ec9b248e2155b5b243",
              "IPY_MODEL_caf0790dbf2544378cb04aa8eb3098c3",
              "IPY_MODEL_3ff0fc5ce62a44b9950dd8575d90bd21"
            ],
            "layout": "IPY_MODEL_77cdafc6dae44107a43a46ae19ed390a"
          }
        },
        "f2c7be27f90b49a3abe51b5e3003c17d": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "DescriptionStyleModel",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "fb359d0651a74fe790aaace9a5d0e329": {
          "model_module": "@jupyter-widgets/controls",
          "model_module_version": "1.5.0",
          "model_name": "DescriptionStyleModel",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        }
      }
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}
